//
//  main.m
//  Day3
//
//  Created by dllo on 16/5/9.
//  Copyright © 2016年 lanou. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    // 循环条件: 在给定的条件下,反复执行某一段代码的流程.
    // 给定的条件: 循环条件   反复执行的事 :循环体
    
#pragma mark - while
    // 1.先写循环结构
//    while (循环条件){
//        循环体
//    }
//    int times = 1;
//    while (times < 10){
//        printf("发射子弹\n");
//        times++;
//    }
    //while循环: 先判断循环条件,如果满足,执行while后面大括号中的内容,执行完会再次判断循环条件,如果满足依然执行,直到循环条件不满足为止.
    // 2.找到循环体
    // 3.确定循环条件
    
#pragma mark - while练习1
    // 用户输入一个数,然后求1加到这个数的和.1+2+3+....+n的和
    
//    printf("请输入一个数\n");
//    int n = 0;
//    scanf("%d",&n);
//    int i = 0;
//    int sum = 0;
//    while (i <= n) {
//        sum += i;
//        i++;//累加思想:当想求几次的时候就想到累加
//    }
//    printf("和为:%d\n", sum);
    
    
#pragma mark - while练习2
    //求1-100中7的倍数,并打印出,并且输出总个数.
//    int x = 0;
//    int i = 1;
//    while (i <= 100) {
//        //判断当前是不是7的倍数
//        if(i % 7 == 0) {
//            printf("%d,", i);
//            x++;// 计数器思想:当求什么中有多少个什么的时候,想到计数器
//        }
//        i++;
//    }
//    printf("总个数为:%d\n",x);
    
#pragma mark - while练习3
    // 男孩想要女孩的微信号,女孩说你猜年龄,三次机会猜中就给你.
    //[a ,b]的随机数     arc4random() % (b - a + 1) + a;
//    int age = arc4random() % (25 - 14 + 1) + 14;
//    int guest = 0;
//    int i = 3;
//    while (i > 0) {
//        printf("请输入猜的数\n");
//        scanf("%d", &guest);
//        if (guest > age) {
//            printf("你是不是瞎! \n");
//            system("say 45454545");
//        } else if (guest < age) {
//            printf("嘴太甜了 \n");
//        } else if (guest == age) {
//            printf("......\n");
//        }
//        i--;
//    }
    
    
#pragma mark - break continue
//    int a = 100;
//    while (a > 0) {
////        if (a == 10) {
////            break; //break只使用在switch和循环结构中,用来跳出switch语句,跳出循环.同一作用域内break后面最好不要写代码,因为执行不到
////        }
//        a--;
//        if (a % 10 == 0) {
//            printf("休息");
//            continue;//结束当前这次循环,然后去判断循环条件,满足继续循环
//        }
//        printf("发射子弹\n");
//    }
    
#pragma mark - do-while
//    do {
//        循环体
//    } while (循环条件);
    
//    int a = 3;
//    while (a < 0) {
//        printf("输出!!!\n");
//    }
//    
//    do {
//        printf("输出!!"\n);
//    } while (a < 0);
    
//    while和do-while的区别:
//        当循环条件不满足的时候while不会做任何操作不会执行循环体.
//        do-while无论循环条件是否满足,都会先执行一次循环体
    
#pragma mark - test
//    int i = 1;
//    while (i <= 100) {
//        if (i % 10 == 7) {
//            printf("%d,", i);
//        }
//        i++;
//    }
//    printf("\n");
//    i = 1;
//    while (i <= 100) {
//        if (i % 100 / 10 == 7) {
//            printf("%d,", i);
//        }
//        i++;
//    }
//    printf("\n");
//    
//    i = 1;
//    while (i <= 100) {
//        if (i % 7 != 0 && i % 10 !=7 && i / 10 != 7) {
//            printf("%d,", i);
//        }
//        i++;
//    }
    
#pragma mark - for循环
//    for (循环变量初始化; 循环条件; 循环增量) {
//        循环体
//    }
//    int count = 5;
//    while (count > 0) {
//        printf("发射子弹\n");
//        count--;
//    }
    
//    for (int i = 5; i > 0; i--) {
//        printf("发射子弹\n");
//    }
//    for (int i = 1; i <= 5; i++) {
//        printf("%d,",i);
//    }
    
//    for (int i = 1; i < 101; i++) {
//        if (i % 2 == 0) {
//            printf("%d,",i);
//        }
//    }
//    int j = 0;
//    for (int i = 1; i < 101; i++) {
//        if (i % 7 == 0) {
//            printf("%d,",i);
//            j++;
//        }
//        
//    }
//    printf("一共%d个数字",j);
    //commond + F 快速查找代码
    //commond + ctrl + E  替换的快捷键
    //commond + z  撤销
    //commond + shift + z 快退一步
    //commond + b 编译
    
    
#pragma mark - 循环的嵌套(重点)
    //外层循环控制行数
//    for (int i = 0; i < 4; i++) {
//        //内层循环控制列数
//        for(int j = 0; j < 4 - i; j++) {
//            printf("* ");
//        }
//        printf("\n");
//    }
//    
//        for (int i = 0; i < 4; i++) {
//            //内层循环控制列数
//            for(int j = 0; j < i + 1; j++) {
//                printf("* ");
//            }
//            printf("\n");
//        }
//    int max = 10;
//    int min = 30;  //注意min值一定要大于或等于最大值
//    int temp = 0;
//    for (int i = 0; i < 10; i++) {
//        temp = arc4random() % (30 - 10 + 1) + 10;
//        printf("%d,",temp);
//        max = max > temp ? max : temp;
//        min = min < temp ? min : temp;
//    }
//    printf("最大:%d,最小:%d",max ,min);
    
    
//    for (int a = 1; a < 10 ; a++) {
//        for (int b = 1; b <= a; b++) {
//            printf("%d*%d=%-5d", b, a,a*b);
//        }
//        printf("\n");
//    }
//    int x = 0;
//    for (int a = 1; a < 10; a++) {
//        for (int b = 0; b < 10; b++) {
//            for (int c = 0; c < 10; c++){
//                x = a * 100 + b * 10 + c;
//                printf("%-4d", x);
//            }
//        }
//    }
//    for (int a = 1; a < 4; a++) {
//        for (int b = 1; b < 6; b++) {
//            if ((a + b) > 2 && (a + b) % 2 == 0 && !(a == 1 && b ==5)) {
//                printf("*");
//            } else {
//                printf(" ");
//            }
//            
//        }
//        printf("\n");
//    }
    
    
    for (int a = 0; a < 3; a++) {
        for (int b = 0; b < 2 - a; b++) {
            printf(" ");
        }
        for (int c = 0; c < a + 1 ;c++) {
            printf("* ");
        }
        printf("\n");
    }
    // 1
    // while:不明确循环次数,但知道循环条件时使用while
    // do-while:不管循环条件是否满足,都会先走一遍循环条件
    // for:明确循环次数,多使用for循环,实际开发当中for循环使用最多.
    // 2
    // 随机数:arc4rodom() % (b - a + 1) + a;
    // 3
    // break:只使用在switch和循环中,遇见break跳出循环,break以后的语句不再执行
    // continue:跳出本次循环,走循环条件判断,进入下次循环.
    // 4
    // 循环的嵌套:几行几列这种的第一时间想到循环嵌套
    // 外层循环控制行数,内层循环控制列数
    return 0;
}
